#pragma once

#include <QString>
#include <QRandomGenerator>

// 前向声明
struct MonsterData;

// 游戏状态枚举
enum class GameState : quint8
{
    WAITING,        // 等待开始
    PREPARING,      // 准备下一关（倒计时阶段）
    IN_COMBAT       // 战斗中
};

// 玩家游戏数据
struct PlayerGameData 
{
    quint32 level;          // 当前关卡
    quint32 health;         // 当前血量
    quint32 maxHealth;      // 最大血量
    quint32 attackPower;    // 攻击力
    quint32 defense;        // 防御力 - 减少受到的伤害
    quint32 critChance;     // 暴击率 (百分比，0-100)
    double critMultiplier;  // 暴击倍数
    quint32 hitChance;      // 命中率 (百分比，0-100)
    quint32 dodgeChance;    // 闪避率 (百分比，0-100)
    quint32 totalKills;     // 总击杀数
    GameState gameState;    // 游戏状态
    bool isInAutoCombat;    // 是否正在自动战斗中
    
    PlayerGameData();
    
    // 30关结构化游戏三阶段随机奖励系统
    QString levelUp();

private:
    // Boss奖励系统 - 每10关的强力奖励
    QString bossReward(QString baseMessage, quint32 bossLevel);

    // 新手期奖励 (1-9关) - 95%概率获得奖励，很难死
    QString novicePhaseReward(QString baseMessage);

    // 挑战期奖励 (11-19关) - 75%概率获得奖励
    QString challengePhaseReward(QString baseMessage);

    // 终极期奖励 (21-29关) - 60%概率获得奖励，为最终Boss做准备
    QString ultimatePhaseReward(QString baseMessage);

public:
    bool isAlive() const;

    // 圆桌攻击系统 - 对目标进行一次完整的攻击判定
    struct AttackResult
    {
        bool hit;           // 是否命中
        bool critical;      // 是否暴击
        quint32 damage;     // 最终伤害
        QString message;    // 攻击描述
    };
    
    AttackResult performAttack(const struct MonsterData& target) const;
    
    // 计算受到的实际伤害（考虑防御）
    quint32 takeDamage(quint32 incomingDamage);

    // 重置玩家数据到初始状态
    bool resetToDefault();
}; 